#include <iostream>
#include <string>

using namespace std;
/*
谓词
    函数对象 返回值 为 bool 类型
    一元谓词
        参数列表中 有一个参数 则为 一元谓词
        // a
    二元谓词
        参数列表中 有两个参数 则为 二元谓词
        // a > b

    排序  查找

        php
        c++ linx

*/
class Add
{
public:
    // 新特征
    int n;
    // bool operator();

    int operator()(int val_1, int val_2)
    {
        ++this->n;
        return val_1 + val_2;
    }
};

/*
1、和函数的使用方式一样
2、可以增加函数状态
*/
int main(int argc, char const *argv[])
{
    Add add;
    add.n = 0;
    // 直接可以使用 对象 作为函数
    int val = add(20, 30);
    val = add(20, 30);
    val = add(20, 30);
    val = add(20, 30);

    cout << val << endl;

    cout << add.n << endl;

    return 0;
}